home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / kernel / xoper13.1 < prev    next >
Internet Message Format  |  1989-03-15  |  57KB

  1. Path: xanth!ames!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i052:  xoper - system operations control v1.3, Part01/02
  5. Message-ID: <12232@swan.ulowell.edu>
  6. Date: 15 Mar 89 17:50:26 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 2038
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: G35@DHDURZ1.BITNET (Guenther Werner)
  12. Posting-number: Volume 89, Issue 52
  13. Archive-name: kernel/xoper13.1
  14.  
  15. Changes in V1.3:
  16.  
  17. New commands: [S]=Stack usage, Sort, Hide, Hidden, Header, Window,
  18.               InputHandler.
  19. Added       : Support of startup-scripts, I/O Interrupts/second,
  20.               'Kill' an alias for 'Cancel'.
  21.  
  22. Some BIG bugs have been removed: The port-display used to GURU if more
  23. than 32 Ports did exist. The Cli Xoper has been started did act like
  24. having a priority of 128. Unlock didn't unlock sometimes, the
  25. interrupt/priority field did contain rubbish, Currentdir didn't
  26. examine all Processes.  There were some more minor bugs, all
  27. (hopefully) removed.
  28.  
  29. [I had to split Xoper.asm into two files: Xoper.asm1 and Xoper.asm2.
  30. Use AmigaDOS 'join' or UNIX 'cat' (or something similar) to combine
  31. them back into Xoper.asm.  ..Bob]
  32.  
  33. #    This is a shell archive.
  34. #    Remove everything above and including the cut line.
  35. #    Then run the rest of the file through sh.
  36. #----cut here-----cut here-----cut here-----cut here----#
  37. #!/bin/sh
  38. # shar:    Shell Archiver
  39. #    Run the following text with /bin/sh to create:
  40. #    Xoper.asm1
  41. # This archive created: Wed Mar 15 12:40:03 1989
  42. cat << \SHAR_EOF > Xoper.asm1
  43. ******************************************
  44. *                                        *
  45. * Xoper 1.3 Copyright (C) Werner Gunther *
  46. *                                        *
  47. ******************************************
  48. *    Written for the A68K Assembler      *
  49. *   (Fish 110) by Charlie Gibbs and      *
  50. *          Brian R. Anderson             *
  51. *                                        *
  52. *  Do not use Smallcode/Smalldata when   *
  53. *             linking                    *
  54. ******************************************
  55.  
  56. ;DEBUG SET 1
  57.             XREF    _LVOSwitch
  58.             XDEF    _SysBase
  59. sysbase     equ     4
  60.  
  61. CALL        MACRO
  62.             xref    _LVO\1
  63.             move.l  \2,a6
  64.             jsr     _LVO\1(a6)
  65.             ENDM
  66. LIBCALL     MACRO
  67.             xref    _\1
  68.             jsr     _\1
  69.             ENDM
  70.  
  71. ADDCMD      MACRO
  72. cmdnum      set     cmdnum+1
  73.             dc.b    \1,0
  74.             ENDM
  75.  
  76. ;Program startup. If called from DOS we
  77. ;use segment splitting to detach
  78. ;from our DOS-task.
  79. start       moveq   #3,d0
  80.             lea     dummyinput,a1
  81. getparm     move.b  (a0)+,(a1)+
  82.             dbf     d0,getparm
  83.             move.b  #10,in
  84.             lea     dosname(PC),a1
  85.             move.l  sysbase,a0
  86.             lea     378(a0),a0
  87.             move.l  a0,-(a7)
  88.             CALL    FindName,sysbase
  89.             move.l  d0,dosbase
  90.             move.l  0(a7),a0
  91.             lea     gfxname(PC),a1
  92.             CALL    FindName,sysbase
  93.             move.l  d0,gfxbase
  94.             move.l  (a7)+,a0
  95.             lea     intuiname(PC),a1
  96.             CALL    FindName,sysbase
  97.             move.l  d0,intuibase
  98.             move.l  d0,a0
  99.             move.l  $38(a0),a0
  100.             move.w  12(a0),d0
  101.             sub.w   #550,d0
  102.             move.w  d0,window_l
  103.  
  104.             move.l  sysbase,a4
  105.             move.l  276(a4),a4
  106.             tst.l   $ac(a4)
  107.             bne.s   notwb
  108.             lea     $5c(a4),a0
  109.             CALL    WaitPort,sysbase
  110.             lea     $5c(a4),a0
  111.             CALL    GetMsg,sysbase
  112.             move.l  d0,wbmsg
  113.             move.w  #$740a,in
  114. notwb:
  115.        IFND  DEBUG
  116.             lea     xopcon,a1
  117.             CALL    FindPort,sysbase
  118.             tst.l   d0
  119.             bne     oops
  120.        ENDC
  121.             tst.l   wbmsg
  122.             beq.s   fromdos
  123.             jmp     mainprg
  124.  
  125. fromdos:
  126.  
  127. starttask:
  128.  
  129.         IFND DEBUG
  130.             cmp.w   #'-b',dummyinput
  131.             bne.s   stt1
  132.             CALL    Output,dosbase
  133.             move.l  d0,-(a7)
  134.             move.l  #windowname,d2
  135.             move.l  d0,d1
  136.             moveq.l #34,d3
  137.             CALL    Write,dosbase
  138.             move.l  #cr,d2
  139.             move.l  (a7)+,d1
  140.             moveq.l #1,d3
  141.             CALL    Write,dosbase
  142. stt1        lea     start(PC),a1
  143.             move.l  -4(a1),d3
  144.             move.l  d3,myseg
  145.             clr.l   -4(a1)
  146.             CALL    Forbid,sysbase
  147.             move.l  #newname,d1
  148.             clr.l   d2
  149.             move.l  #3500,d4
  150.             CALL    CreateProc,dosbase
  151.             CALL    Permit,sysbase
  152.             clr.l   d0
  153.             rts
  154. oops        suba.l  a0,a0
  155.             CALL    DisplayBeep,intuibase
  156.             CALL    Forbid,sysbase
  157.             move.l  wbmsg,d0
  158.             beq.s   leave
  159.             move.l  d0,a1
  160.             CALL    ReplyMsg,sysbase
  161.             clr.l   d0
  162. leave       rts
  163.  
  164. dosname     dc.b    'dos.library',0
  165. intuiname   dc.b    'intuition.library',0
  166. gfxname     dc.b    'graphics.library',0
  167.             EVEN
  168.  
  169. main        CODE    xoper
  170.         ENDC
  171. mainprg     move.l  sysbase,a0
  172.             move.l  a0,_SysBase
  173.             move.l  276(a0),a0
  174.             move.l  a0,mytask
  175.             move.l  #newname,10(a0)
  176.             pea     0
  177.             pea     xopcon
  178.             LIBCALL CreatePort
  179.             lea     8(a7),a7
  180.             move.l  d0,replyport
  181. ;install a counter to determine the amount of CPU-time each
  182. ;Task uses.
  183.             move.l  _SysBase(PC),a1
  184.             move.l  #_LVOSwitch,a0
  185.             move.l  2(a1,a0),oldswitch
  186.             move.l  #myswitch,d0
  187.             CALL    SetFunction,_SysBase(PC)
  188. ;install a counter for PORT-Interrupts
  189.             lea     IOCounter(PC),a1
  190.             move.l  #3,d0
  191.             CALL    AddIntServer,_SysBase(PC)
  192. ;Attempt to open a startup script
  193.             move.l  mytask(PC),a4
  194.             move.l  #-1,184(a4)
  195.             move.l  #startupname,d1
  196.             move.l  #1005,d2
  197.             CALL    Open,dosbase(PC)
  198.             clr.l   184(a4)
  199.             move.l  d0,infile
  200.             beq.s   nostartup
  201.             clr.b   morefl
  202.             move.b  #1,fromfile
  203.             bra     cli
  204. endstartup  move.b  morefl2(PC),morefl
  205.             clr.b   fromfile
  206.             move.l  infile(PC),d1
  207.             CALL    Close,dosbase(PC)
  208.  
  209. nostartup   tst.l   wbmsg
  210.             bne.s   noin
  211.             cmp.b   #10,dummyinput
  212.             beq.s   noin
  213.             cmp.w   #'-b',dummyinput
  214.             beq.s   noin
  215.             move.l  dummyinput,in
  216.             move.b  #10,in+4
  217.             bra.s   nostartup2
  218. noin        cmp.b   #10,in
  219.             beq.s   default
  220.             tst.b   in
  221.             bne.s   nostartup2
  222.  
  223. default     move.w  #$740a,in
  224.  
  225.  
  226. nostartup2  cmp.w   #'-b',dummyinput
  227.             beq     instback
  228.  
  229. ;This code just opens a CON: Window. Position
  230. ;and size are taken from window_l,window_t,
  231. ;window_w,window_h.
  232.  
  233. restart     move.l  mytask(PC),a0
  234.             clr.l   26(a0)
  235.             lea     fname,a0
  236.             move.l  #'con:',0(a0)
  237.             clr.b   4(a0)
  238.             lea     binarea(PC),a1
  239.             lea     window_l(PC),a2
  240.             move.l  #3,d4
  241. rest1       move.l  #2,d3
  242.             clr.l   d0
  243.             move.w  (a2)+,d0
  244.             bsr     longdec
  245.             bsr     strcat
  246.             move.w  #$2f00,binarea
  247.             bsr     strcat
  248.             dbf     d4,rest1
  249.             lea     windowname(PC),a1
  250.             bsr     strcat
  251.             move.l  a0,d1
  252.             move.l  #1005,d2
  253.             CALL    Open,dosbase(PC)
  254.             move.l  d0,fileptr
  255.             move.l  d0,infile
  256.             beq     exitall
  257.             lsl.l   #2,d0
  258.             move.l  d0,a4
  259.             move.l  8(a4),conmsg
  260. ;get a pointer to our window
  261.             move.l  #buffer,d0
  262.             lsr.l   #2,d0
  263.             move.l  d0,dp_Arg1
  264.             move.l  conmsg,a0
  265.             move.l  #25,dp_Type
  266.             bsr     cons1
  267.             lea     buffer,a0
  268.             move.l  28(a0),window
  269.  
  270.             clr.l   ptr
  271.  
  272. ;show a list. The string entered from keyboard is stored
  273. ;in 'in'.Every character is interpreted as one command
  274. ;i.e. 'rip' means 'resources'+'interrupts'+'ports'.
  275. showwhat    bsr     raw
  276.             bsr     clearscr
  277.             tst.b   morefl
  278.             beq.s   swh1
  279. ;if <MORE> is enabled we need to know how many lines can
  280. ;fit into our window
  281.             move.l  #getwin,d2
  282.             move.l  fileptr,d1
  283.             moveq.l #4,d3
  284.             CALL    Write,dosbase(PC)
  285.             move.l  fileptr,d1
  286.             move.l  #9,d3
  287.             move.l  #buffer,d2
  288.             CALL    Read,dosbase(PC)
  289.             lea     buffer,a0
  290.             lea     5(a0),a0
  291.             bsr     isdec
  292.             subq.b  #1,d2
  293.             move.b  d2,rows
  294.             clr.b   row
  295. ;search the command to be executed. If none is found,
  296. ;show a help message
  297. swh1        clr.l   d7
  298. input       lea     in,a0
  299.             move.b  0(a0,d7),d0
  300.             addq.b  #1,d7
  301.             cmpi.b  #' ',d0
  302.             beq.s   input
  303.             tst.b   d0
  304.             beq     nomore
  305.             cmpi.b  #10,d0
  306.             beq     nomore
  307.             or.b    #32,d0
  308.             cmpi.b  #'q',d0
  309.             beq     exit
  310.             lea     params(PC),a0
  311.             clr.l   d1
  312. i1          cmp.b   0(a0,d1),d0
  313.             beq.s   foundp
  314.             addq.b  #1,d1
  315.             cmpi.b  #parmnum,d1
  316.             bne.s   i1
  317.  
  318.             move.l  #usetxt,d0
  319.             move.b  #1,mnflag
  320.             bsr     putnam
  321.             clr.b   mnflag
  322.             bra     nomore
  323.  
  324. foundp      lsl.b   #2,d1
  325.             lea     subs(PC),a0
  326.             move.b  #1,mnflag
  327.             jsr     0(a0,d1)
  328.             clr.b   mnflag
  329.             bra.s   input
  330.  
  331. ;wait 'timeout' seconds for a kepress
  332.  
  333. nomore      tst.b   fromfile
  334.             bne.s   cli
  335.             move.l  #prompt,d2
  336.             move.l  fileptr,d1
  337.             moveq.l #7,d3
  338.             CALL    Write,dosbase(PC)
  339.             bsr     con
  340.             move.b  timeout,d6
  341. halt        move.l  #1000000,d4
  342.             bsr     getkey
  343.             move.l  mytask(PC),a0
  344.             move.l  26(a0),d1
  345.             and.l   #$1000,d1
  346.             bne     exit
  347.             tst.l   d0
  348.             bne.s   cli
  349.             subq.b  #1,d6
  350.             bne.s   halt
  351.             clr.l   d4
  352.             bsr     getkey
  353.             tst.l   d0
  354.             bne.s   cli
  355.             bra     showwhat
  356.  
  357. getkey      move.l  fileptr,d1
  358.             moveq.l #1,d3
  359.             move.l  #null,d2
  360.             CALL    Write,dosbase(PC)
  361.             move.l  d4,d2
  362.             move.l  fileptr,d1
  363.             CALL    WaitForChar,dosbase(PC)
  364.             rts
  365. ;read the string from keyboard search and execute
  366. ;the command, if any.
  367. cli         tst.b   fromfile
  368.             beq.s   cl3
  369.             tst.b   eof
  370.             bne     endstartup
  371. cl3         bsr     readline
  372.             lea     dummy,a0
  373.             subq.b  #1,d0
  374. cl2         subq.b  #1,d0
  375.             bmi.s   cl1
  376.             cmp.b   #' ',0(a0,d0)
  377.             beq.s   cl2
  378. cl1         addq.b  #1,d0
  379.             move.b  #10,0(a0,d0)
  380.             bsr     kllblnks
  381.             cmpi.b  #10,0(a0)
  382.             beq     showwhat
  383.             cmpi.b  #';',0(a0)
  384.             beq     nomore
  385.             lea     in,a1
  386.             lea     commds(PC),a2
  387.             clr.b   d2
  388. tstcmd      move    #-1,d1
  389. tc2         addq    #1,d1
  390.             move.b  0(a0,d1),d3
  391.             or.b    #32,d3
  392.             tst.b   0(a2,d1)
  393.             beq.s   foundcmd
  394.             cmp.b   0(a2,d1),d3
  395.             beq.s   tc2
  396. nocmd       tst.b   (a2)+
  397.             bne.s   nocmd
  398.             addq.b  #1,d2
  399.             cmpi.b  #cmdnum,d2
  400.             bne     tstcmd
  401.             bra     nm1
  402. foundcmd    cmpi.b  #'*',d3
  403.             beq.s   okcmd
  404.             cmpi.b  #' ',d3
  405.             bne.s   nocmd
  406. okcmd       move.l  a0,-(a7)
  407.             bsr     raw
  408.             move.l  (a7)+,a0
  409.             clr.b   procnum
  410.             adda.w  d1,a0
  411.             bsr     kllblnks
  412.             and.l   #$ff,d2
  413.             lsl     #2,d2
  414.             lea     cmdaddr(PC),a1
  415.             clr.b   printed
  416.             jsr     0(a1,d2)
  417.             tst.b   morefl
  418.             beq     nomore
  419.             tst.b   printed
  420.             beq     nomore
  421.             bsr     raw
  422.             move.l  #10,d3
  423.             move.l  fileptr,d1
  424.             move.l  #waittxt,d2
  425.             CALL    Write,dosbase(PC)
  426.             bsr     readline
  427.             bsr     con
  428.             move.l  #1,d3
  429.             move.l  fileptr,d1
  430.             move.l  #thisline,d2
  431.             CALL    Write,dosbase(PC)
  432.             bra     nomore
  433.  
  434. nm1         lea     buffer,a2
  435. nm2         move.b  (a1)+,(a2)+
  436.             cmp.b   #10,-1(a1)
  437.             bne.s   nm2
  438.             lea     in,a1
  439. nm0         move.b  (a0)+,(a1)+
  440.             dbf     d0,nm0
  441.             lea     dummy,a2
  442.             lea     buffer,a1
  443. nm3         move.b  (a1)+,(a2)+
  444.             cmp.b   #10,-1(a1)
  445.             bne.s   nm3
  446.             bra     showwhat
  447.  
  448. subs        bra     showtask
  449.             bra     showaddr
  450.             bra     showdevs
  451.             bra     showlibs
  452.             bra     showres
  453.             bra     showresi
  454.             bra     showmem
  455.             bra     showprt
  456.             bra     showint
  457.             bra     stack
  458. cmdaddr     bra     settime
  459.             bra     taskpri
  460.             bra     info
  461.             bra     pri
  462.             bra     flush
  463.             bra     freeze
  464.             bra     warm
  465.             bra     signal
  466.             bra     break
  467.             bra     alert
  468.             bra     lastalert
  469.             bra     hold
  470.             bra     stopall
  471.             bra     clear
  472.             bra     cancel
  473.             bra     moretst
  474.             bra     taskports
  475.             bra     hunks
  476.             bra     devices
  477.             bra     openlib
  478.             bra     closelib
  479.             bra     currentdir
  480.             bra     cd
  481.             bra     mypri
  482.             bra     openfiles
  483.             bra     locks
  484.             bra     unlock
  485.             bra     screens
  486.             bra     windows
  487.             bra     closescreen
  488.             bra     closewindow
  489.             bra     fonts
  490.             bra     windowfonts
  491.             bra     lockdrive
  492.             bra     freedrive
  493.             bra     capture
  494.             bra     clrcold
  495.             bra     clrcool
  496.             bra     clrwarm
  497.             bra     snoop
  498.             bra     usage
  499.             bra     inphand
  500.             bra     nohead
  501.             bra     sort
  502.             bra     hide
  503.             bra     hidden
  504.             bra     setwindow
  505.             bra     cancel
  506.  
  507. ;------ Task-Structures-----
  508.  
  509. showaddr    clr.b   tasktyp
  510.             bra.s   startask
  511. showtask    move.b  #1,tasktyp
  512. startask    tst.b   headon
  513.             beq     noheader1
  514.             move.l  #infoh1,d0
  515.             bsr     putstr
  516.             move.l  _SysBase(PC),a6
  517.             move.l  #cpu2,d0
  518.             btst    #1,297(a6)
  519.             bne.s   cpupr
  520.             move.l  #cpu1,d0
  521.             btst    #0,297(a6)
  522.             bne.s   cpupr
  523.             move.l  #cpu0,d0
  524. cpupr       bsr     putstr
  525.             move.l  _SysBase(PC),a6
  526.             btst    #2,297(a6)
  527.             beq.s   no881
  528.             move.l  #cpu3,d0
  529.             bsr     putstr
  530. no881       move.l  #20,d1
  531.             bsr     tab
  532.             move.l  #infoh3,d0
  533.             bsr     putstr
  534.  
  535. noheader1   move.l  _SysBase(PC),a6
  536.             move.w  #$4000,$dff09a
  537.             move.l  280(a6),d0
  538.             move.l  284(a6),d1
  539.             move.l  oldidl,d3
  540.             move.l  d0,oldidl
  541.             sub.l   d3,d0
  542.             move.l  olddisp,d3
  543.             move.l  d1,olddisp
  544.             sub.l   d1,d3
  545.             move.l  d0,d1
  546.             sub.l   d3,d1
  547.             move.l  d1,maxdisp
  548.             move.l  d3,-(a7)
  549.             movem.l d0-d3,-(a7)
  550.             bsr     getaskdat
  551.             move.l  a5,savedat
  552.             movem.l (a7)+,d0-d3
  553.             sub.l   d3,d0
  554.             neg.l   d3
  555.             tst.b   headon
  556.             beq.s   noheader2
  557.             bsr     prcent
  558.             bsr     newline
  559.             move.l  #infoh2,d0
  560.             bsr     putstr
  561. noheader2   move.l  (a7)+,d0
  562.             neg.l   d0
  563.             move.l  d0,dispatches
  564.             tst.b   headon
  565.             beq     noheader3
  566.             clr.l   d3
  567.             bsr     longdec
  568.  
  569.             move.l  #20,d1
  570.             bsr     tab
  571.             move.l  #infoh7,d0
  572.             bsr     putstr
  573.             lea     secs(PC),a0
  574.             lea     mics(PC),a1
  575.             CALL    CurrentTime,intuibase(PC)
  576.             move.l  secs(PC),d3
  577.             lsl.l   #1,d3
  578.             move.l  d3,d1
  579.             lsl.l   #2,d3
  580.             add.l   d1,d3
  581.             move.l  mics(PC),d0
  582.             move.l  #100000,d1
  583.             bsr     div
  584.             add.l   d0,d3
  585.             move.l  time10(PC),d1
  586.             move.l  d3,time10
  587.             sub.l   d1,d3
  588.             move.l  iocount(PC),d0
  589.             clr.l   iocount
  590.             mulu    #100,d0
  591.             move.l  d3,d1
  592.             bsr     div
  593.             divu    #10,d0
  594.             move.l  d0,d1
  595.             swap    d1
  596.             move    d0,d3
  597.             bsr     bytedec
  598.             lea     out,a0
  599.             move.b  #'.',-1(a0,d0)
  600.             or.b    #'0',d1
  601.             move    d1,d0
  602.             bsr     putchar
  603.  
  604.             bsr     newline
  605.             bsr     newline
  606. noheader3   lea     theader(PC),a0
  607.             tst.b   tasktyp
  608.             bne.s   phedder
  609.             lea     t2header(PC),a0
  610. phedder     bsr     puthead
  611.             move.l  savedat(PC),a5
  612.  
  613. pt1         tst.b   entries
  614.             beq     pt2
  615.             lea     -16(a5),a5
  616.             bsr     hideit
  617.             tst     d0
  618.             beq     ptend
  619.             move.l  0(a5),a4
  620.             move.l  a4,d0
  621.             bsr     hexa
  622.             tst.b   tasktyp
  623.             beq.s   pt12
  624.             clr.l   d0
  625.             move.b  8(a4),d0
  626.             bsr     gettype
  627.  
  628. pt12        clr.l   d0
  629.             move.b  9(a5),d0
  630.             subq.b  #1,d0
  631.             mulu    #10,d0
  632.             move.l  #status,d1
  633.             add.l   d1,d0
  634.             bsr     putstr
  635.             tst.b   tasktyp
  636.             bne.s   pt13
  637.  
  638.             move.l  18(a4),d0
  639.             bsr     hex8
  640.             move.l  #ganzlongnix,d0
  641.             cmp.b   #4,9(a5)
  642.             beq.s   pt14
  643.             bsr     putstr
  644.             bra.s   pt15
  645. pt14        move.l  22(a4),d0
  646.             bsr     hex8
  647. pt15        move.l  26(a4),d0
  648.             bsr     hex8
  649.             move.l  54(a4),a1
  650.             move.l  0(a1),d0
  651.             cmp.b   #2,9(a5)
  652.             bne.s   pt16
  653.             move.l  #*,d0
  654. pt16        bsr     hexa
  655.             bra     pt4
  656.  
  657. pt13        move.b  10(a5),d3
  658.             bsr     plusmins
  659.  
  660.             move.l  dispatches(PC),d0
  661.             tst.b   usageflag
  662.             beq.s   pt37
  663.             move.l  maxdisp(PC),d0
  664. pt37        move.l  12(a5),d3
  665.             bsr     prcent
  666.  
  667.             clr.b   d3
  668.             cmpi.b  #13,8(a5)
  669.             bne.s   noproc
  670.             tst.l   172(a4)
  671.             beq.s   noproc
  672.             move.l  140(a4),d3
  673.             bsr     bytedec
  674.             bra.s   pt4
  675. noproc      move.l  #nix,d0
  676.             bsr     putstr
  677. pt4         move.l  4(a5),d0
  678.             bsr     putnam
  679. ptend       subq.b  #1,entries
  680.             bra     pt1
  681. pt2         rts
  682.  
  683. putlist     move.l  0(a4),a4
  684.             tst.l   0(a4)
  685.             beq.s   endlist
  686.             bsr     putdata
  687.             bra.s   putlist
  688. endlist     rts
  689.  
  690. putdata     move.l  a4,0(a5)
  691.             move.l  10(a4),4(a5)
  692.             move.b  8(a4),8(a5)
  693.             move.b  15(a4),9(a5)
  694.             move.b  9(a4),10(a5)
  695.             move.b  143(a4),11(a5)
  696.             clr.l   12(a5)
  697.             lea     cputime,a0
  698.             move.l  tasksnum(PC),d1
  699.             beq.s   pua1
  700. pua3        cmp.l   0(a0),a4
  701.             beq.s   pua2
  702.             lea     8(a0),a0
  703.             dbf     d1,pua3
  704.             bra.s   pua1
  705. pua2        move.l  4(a0),12(a5)
  706. pua1        lea     16(a5),a5
  707.             addq.b  #1,entries
  708.             rts
  709.  
  710. gettype     and.l   #$f,d0
  711.             mulu    #11,d0
  712.             add.l   #type,d0
  713.             bra     putstr
  714.  
  715. getaskdat   lea     buffer,a5
  716.             clr.b   entries
  717.             lea     stplist(PC),a4
  718.             bsr     putlist
  719.             move.l  _SysBase(PC),a4
  720.             lea     420(a4),a4
  721.             bsr     putlist
  722.             move.l  _SysBase(PC),a4
  723.             lea     406(a4),a4
  724.             bsr     putlist
  725.             move.l  _SysBase(PC),a4
  726.             move.l  276(a4),a4
  727.             bsr     putdata
  728.             clr.l   tasksnum
  729.             move.w  #-$4000,$dff09a
  730.             tst.b   sorton
  731.             beq.s   sort5
  732.             lea     buffer,a3
  733.             lea     -32(a5),a2
  734. sort1       lea     16(a3),a4
  735. sort2       move.l  0(a3),d1
  736.             cmp.l   0(a4),d1
  737.             bge.s   sort3
  738.             moveq   #15,d1
  739. sort4       move.b  0(a4,d1),d0
  740.             move.b  0(a3,d1),0(a4,d1)
  741.             move.b  d0,0(a3,d1)
  742.             dbf     d1,sort4
  743. sort3       lea     16(a4),a4
  744.             cmp.l   a2,a4
  745.             ble.s   sort2
  746.             lea     16(a3),a3
  747.             cmp.l   a2,a3
  748.             bne.s   sort1
  749. sort5       rts
  750.  
  751. prcent      lsl.l   #1,d3
  752.             move.l  d3,d1
  753.             lsl.l   #2,d3
  754.             add.l   d1,d3
  755.             lsl.l   #2,d3
  756.             move.l  d3,d1
  757.             lsl.l   #3,d3
  758.             move.l  d3,d2
  759.             lsl.l   #1,d3
  760.             add.l   d2,d3
  761.             add.l   d1,d3
  762.             move.l  d0,d1
  763.             move.l  d3,d0
  764.             bsr     div
  765.             divu    #10,d0
  766.             move    d0,d3
  767.             swap    d0
  768.             move    d0,d1
  769.             bsr     bytedec
  770.             lea     out,a0
  771.             move.b  #'.',-1(a0,d0)
  772.             or.b    #'0',d1
  773.             move    d1,d0
  774.             bsr     putchar
  775.             move.l  #infoh4,d0
  776.             bra     putstr
  777.  
  778. hideit      tst.b   hideon
  779.             bne.s   pt73
  780. pt75        moveq   #1,d0
  781.             rts
  782. pt73        lea     hidestart(PC),a4
  783.             move.l  4(a5),a0
  784. pt74        tst.l   0(a4)
  785.             beq.s   pt75
  786.             move.l  0(a4),a4
  787.             lea     4(a4),a1
  788.             bsr     strcmp
  789.             tst     d0
  790.             beq     hideend
  791.             bra.s   pt74
  792. hideend     rts
  793. *-------- mem-hunks ------------
  794.  
  795. showmem     lea     mheader(PC),a0
  796.             bsr     puthead
  797.             move.l  _SysBase(PC),a5
  798.             lea     322(a5),a5
  799.             clr.l   d5
  800. mem1        move.l  0(a5),a5
  801.             tst.l   0(a5)
  802.             beq.s   mem2
  803.             move.l  20(a5),d0
  804.             bsr     hexa
  805.             move.l  24(a5),d0
  806.             bsr     hexa
  807.             move.l  28(a5),d0
  808.             add.l   d0,d5
  809.             moveq   #1,d3
  810.             bsr     longdec
  811.             move.b  15(a5),d3
  812.             bsr     bytedec
  813.             move.b  9(a5),d3
  814.             bsr     plusmins
  815.             move.l  10(a5),d0
  816.             bsr     putnam
  817.             bra.s   mem1
  818. mem2        move.l  #infoh6,d0
  819.             bsr     putstr
  820.             move.l  #15,d1
  821.             bsr     tab
  822.             move.l  d5,d0
  823.             bsr     longdec
  824. newline     move.l  #nxtline,d0
  825.             bra     putstr
  826.  
  827. *-------- Task-Stack ------------
  828.  
  829. stack       lea     stackhead(pc),a0
  830.             bsr     puthead
  831.             bsr     getaskdat
  832. sta1        tst.b   entries
  833.             beq     sta8
  834.             lea     -16(a5),a5
  835.             bsr     hideit
  836.             tst     d0
  837.             beq     sta9
  838.             move.l  0(a5),a1
  839.             cmp.b   #13,8(a1)
  840.             bne.s   sta6
  841.             move.l  172(a1),d0
  842.             beq.s   sta6
  843.             lsl.l   #2,d0
  844.             move.l  d0,a0
  845.             tst.l   60(a0)
  846.             beq.s   sta6
  847.             moveq   #1,d3
  848.             move.l  52(a0),d4
  849.             lsl.l   #2,d4
  850.             move.l  176(a1),d0
  851.             sub.l   d4,d0
  852.             bsr     hexa
  853.             move.l  d4,d0
  854.             bsr     longdec
  855.             move.l  176(a1),d0
  856.             sub.l   54(a1),d0
  857.             bra.s   sta7
  858.  
  859. sta6        move.l  58(a1),d0
  860.             bsr     hexa
  861.             moveq   #1,d3
  862.             move.l  62(a1),d0
  863.             sub.l   58(a1),d0
  864.             bsr     longdec
  865.             move.l  62(a1),d0
  866.             sub.l   54(a1),d0
  867. sta7        bsr     longdec
  868.             move.l  4(a5),d0
  869.             bsr     putnam
  870. sta9        subq.b  #1,entries
  871.             bra     sta1
  872. sta8        rts
  873.  
  874. *--------- interrupts ------------
  875. showint     lea     iheader(PC),a0
  876.             bsr     puthead
  877.             lea     intnames(PC),a5
  878.             lea     inttyp(PC),a4
  879.             move.l  #15,d5
  880.             move.l  _SysBase(PC),a3
  881.             lea     84(a3),a3
  882.  
  883. si0         tst.b   0(a4)
  884.             bne.s   si4
  885.             move.l  8(a3),a2
  886.             bra.s   si5
  887. si4         move.l  0(a3),a2
  888. si5         cmp.l   #0,a2
  889.             beq.s   nxtint
  890.             tst.b   0(a4)
  891.             beq.s   si1
  892. si2         move.l  0(a2),a2
  893.             tst.l   0(a2)
  894.             beq.s   nxtint
  895. si1         move.l  a2,d0
  896.             bsr     hexa
  897.             move.l  14(a2),d0
  898.             bsr     hexa
  899.             move.l  18(a2),d0
  900.             bsr     hexa
  901.             move.b  9(a2),d3
  902.             move.l  a3,-(a7)
  903.             bsr     plusmins
  904.             move.l  (a7)+,a3
  905.             move.l  a5,d0
  906.             bsr     putstr
  907.             move.l  10(a2),d0
  908.             tst.l   d0
  909.             bne.s   prtintnam
  910.             move.l  #ganzlongnix,d0
  911. prtintnam   bsr     putnam
  912.             tst.b   0(a4)
  913.             bne.s   si2
  914.             tst.l   0(a2)
  915.             beq.s   nxtint
  916.             move.l  0(a4),a4
  917.             bra     si1
  918. nxtint      lea     1(a4),a4
  919.             lea     12(a5),a5
  920.             lea     12(a3),a3
  921.             dbf     d5,si0
  922.             rts
  923.  
  924. *---------    resident ------------
  925.  
  926. showresi    lea     rheader(PC),a0
  927.             bsr     puthead
  928.             move.l  _SysBase(PC),a5
  929.             move.l  300(a5),a5
  930. r1          tst.l   0(a5)
  931.             beq     r2
  932.             move.l  0(a5),a4
  933.             move.l  a4,d0
  934.             bsr     hexa
  935.             move.b  13(a4),d3
  936.             bsr     plusmins
  937.             move.b  10(a4),d0
  938.             bsr     bin
  939.             move.b  11(a4),d3
  940.             bsr     bytedec
  941.             move.b  12(a4),d0
  942.             bsr     gettype
  943.             move.l  14(a4),d0
  944.             bsr     putnam
  945.             lea     4(a5),a5
  946.             bra     r1
  947. r2          rts
  948.  
  949. *---------  ports  -------------
  950.  
  951. showprt     lea     pheader(PC),a0
  952.             bsr     puthead
  953.             move.l  _SysBase(PC),a4
  954.             lea     392(a4),a4
  955.             lea     buffer,a5
  956.             clr.l   d5
  957.             CALL    Forbid,_SysBase(PC)
  958.             move.w  #$4000,$dff09a
  959. sp2         move.l  0(a4),a4
  960.             tst.l   0(a4)
  961.             beq.s   sp20
  962.             bsr     getpdata
  963.             bra.s   sp2
  964. sp20        tst.b   tports
  965.             bne.s   sp15
  966.             move.l  _SysBase(PC),a4
  967.             move.l  276(a4),a4
  968.             lea     92(a4),a4
  969.             bsr     getpdata
  970.             move.l  _SysBase(PC),a2
  971.             lea     406(a2),a2
  972. sp11        move.l  0(a2),a2
  973.             tst.l   0(a2)
  974.             beq.s   sp14
  975.             lea     92(a2),a4
  976.             cmp.b   #13,8(a2)
  977.             bne.s   sp11
  978.             bsr     getpdata
  979.             bra     sp11
  980. sp14        move.l  _SysBase(PC),a2
  981.             lea     420(a2),a2
  982. sp12        move.l  0(a2),a2
  983.             tst.l   0(a2)
  984.             beq.s   sp15
  985.             lea     92(a2),a4
  986.             cmp.b   #13,8(a2)
  987.             bne.s   sp12
  988.             bsr     getpdata
  989.             bra     sp12
  990. sp15        move.w  #-$4000,$dff09a
  991.             CALL    Permit,_SysBase(PC)
  992.             lea     buffer,a5
  993. sp3         tst.b   d5
  994.             beq     sp6
  995.             move.l  0(a5),d0
  996.             bsr     hexa
  997.             move.l  4(a5),d0
  998.             bsr     putstr
  999.             move.l  #23,d1
  1000.             bsr     tab
  1001.             move.b  8(a5),d0
  1002.             and.l   #3,d0
  1003.             mulu    #9,d0
  1004.             add.l   #mp_flags,d0
  1005.             bsr     putstr
  1006.             move.b  9(a5),d3
  1007.             bsr     bytedec
  1008.             move.b  14(a5),d3
  1009.             bsr     bytedec
  1010.             move.l  #ganzlongnix,d0
  1011.             move.l  10(a5),a3
  1012.             cmp.l   #0,a3
  1013.             beq.s   sp8
  1014.             move.l  10(a3),d1
  1015.             move.l  d1,d2
  1016.             andi.l  #$ff000000,d2
  1017.             bne.s   sp8
  1018.             move.l  d1,d0
  1019. sp8         bsr     putnam
  1020.             lea     16(a5),a5
  1021.             subq.b  #1,d5
  1022.             bra     sp3
  1023. sp6         rts
  1024.  
  1025. getpdata    move.l  a4,0(a5)
  1026.             move.l  10(a4),4(a5)
  1027.             move.b  14(a4),8(a5)
  1028.             move.b  15(a4),9(a5)
  1029.             move.l  16(a4),10(a5)
  1030.             clr.b   d0
  1031.             movea.l 20(a4),a3
  1032. sp10        movea.l 0(a3),a3
  1033.             cmpa.l  #0,a3
  1034.             beq.s   sp9
  1035.             addq.b  #1,d0
  1036.             cmp.b   #255,d0
  1037.             bne.s   sp10
  1038. sp9         move.b  d0,14(a5)
  1039.             lea     16(a5),a5
  1040.             addq.b  #1,d5
  1041.             rts
  1042. *-------- resources ------------
  1043.  
  1044. showres     lea     lheader(PC),a0
  1045.             bsr     puthead1
  1046.             lea     resnam(PC),a0
  1047.             bsr     puthead2
  1048.             move.l  _SysBase(PC),d5
  1049.             add.l   #336,d5
  1050.             bsr     show
  1051.             rts
  1052.  
  1053. *--------- devices  -------------
  1054.  
  1055. showdevs    lea     lheader(PC),a0
  1056.             bsr     puthead1
  1057.             lea     devnam(PC),a0
  1058.             bsr     puthead2
  1059.             move.l  _SysBase(PC),d5
  1060.             add.l   #350,d5
  1061.             bsr     show
  1062.             rts
  1063.  
  1064. *-------- libraries -------------
  1065.  
  1066. showlibs    lea     lheader(PC),a0
  1067.             bsr     puthead1
  1068.             lea     libnam(PC),a0
  1069.             bsr     puthead2
  1070.             move.l  _SysBase(PC),d5
  1071.             add.l   #378,d5
  1072.  
  1073. show        lea     buffer,a5
  1074.             clr.b   entries
  1075.             CALL    Forbid,_SysBase(PC)
  1076.             move.l  d5,a4
  1077. sl1         move.l  0(a4),a4
  1078.             tst.l   0(a4)
  1079.             beq.s   sl2
  1080.             addq.b  #1,entries
  1081.             move.l  a4,0(a5)
  1082.             move.l  10(a4),4(a5)
  1083.             move.b  33(a4),8(a5)
  1084.             move.b  21(a4),9(a5)
  1085.             move.b  23(a4),10(a5)
  1086.             move.b  14(a4),11(a5)
  1087.             lea     12(a5),a5
  1088.             bra.s   sl1
  1089. sl2         CALL    Permit,_SysBase(PC)
  1090.  
  1091.             lea     buffer,a5
  1092. dl3         tst.b   entries
  1093.             beq.s   sl4
  1094.             move.l  0(a5),d0
  1095.             bsr     hexa
  1096.             move.b  8(a5),d3
  1097.             bsr     bytedec
  1098.             move.b  9(a5),d3
  1099.             bsr     bytedec
  1100.             move.b  10(a5),d3
  1101.             bsr     bytedec
  1102.             move.b  11(a5),d0
  1103.             bsr     bin
  1104.             move.l  4(a5),d0
  1105.             bsr     putnam
  1106.             lea     12(a5),a5
  1107.             subq.b  #1,entries
  1108.             bra.s   dl3
  1109. sl4         rts
  1110.  
  1111. ;find the first entry in the device-list
  1112. ;returns a1 = pointer to first entry
  1113.  
  1114. devinfo     move.l  dosbase(PC),a1
  1115.             move.l  34(a1),a1
  1116.             move.l  24(a1),a1
  1117.             adda.l  a1,a1
  1118.             adda.l  a1,a1
  1119.             move.l  4(a1),a1
  1120.             rts
  1121.  
  1122. ;unlock a file
  1123. unlock      tst.b   fromfile
  1124.             bne     ul6
  1125.             bsr     readhex
  1126.             tst.b   d7
  1127.             beq     syntax
  1128.             move.l  d0,remembr
  1129.             move.l  d0,-(a7)
  1130.             move    #-1,d6
  1131.             bsr     of44
  1132.             tst.l   remembr
  1133.             beq.s   ul1
  1134.             move.l  #unlerr,d0
  1135.             bsr     putnam
  1136.             bra     ul4
  1137. ul1         move.l  #unl1,d0
  1138.             bsr     putstr
  1139.             move.l  0(a7),d0
  1140.             bsr     getpath
  1141.             move.l  #unltxt2,d0
  1142.             bsr     putstr
  1143.             bsr     readline
  1144.             ori.b   #$20,dummy
  1145.             cmp.b   #'y',dummy
  1146.             bne.s   ul5
  1147.             move.l  0(a7),d1
  1148.             CALL    UnLock,dosbase
  1149. ul5         bsr     freefinfo
  1150. ul4         lea     4(a7),a7
  1151. ul6         rts
  1152. ;---------- Show all Locks------------
  1153. locks       clr.l   d6
  1154.             bra.s   of33
  1155.  
  1156. ;---------- Open Files-----------
  1157. openfiles   moveq   #1,d6
  1158. of33        lea     ofheader(PC),a0
  1159.             bsr     puthead
  1160. of44        bsr     allocfinfo
  1161.             bsr     devinfo
  1162.             move.l  a1,a3
  1163. of1         adda.l  a3,a3
  1164.             adda.l  a3,a3
  1165.             cmp.l   #2,4(a3)
  1166.             bne     of2
  1167.             move.l  40(a3),d0
  1168.             lsl.l   #2,d0
  1169.             move.l  d0,a4
  1170.             clr.l   d3
  1171.             move.b  (a4)+,d3
  1172.             subq    #1,d3
  1173.             lea     buffer,a5
  1174. of22        move.b  (a4)+,(a5)+
  1175.             dbf     d3,of22
  1176.             move.b  #':',(a5)+
  1177.             clr.b   0(a5)
  1178.             cmp.l   #'RAM ',buffer
  1179.             bne.s   of5
  1180.             cmp.l   #'Disk',buffer+4
  1181.             bne.s   of5
  1182.             move.l  #$4d3a0000,buffer+2
  1183. of5         move.l  #buffer,d1
  1184.             move.l  #-2,d2
  1185.             CALL    Lock,dosbase(PC)
  1186.             tst.l   d0
  1187.             bne.s   of6
  1188.             move.l  #buffer,d0
  1189.             bsr     putstr
  1190.             move.l  #nomount,d0
  1191.             bsr     putnam
  1192.             bra     of2
  1193.  
  1194. of6         move.l  d0,-(a7)
  1195.             lsl.l   #2,d0
  1196.             move.l  d0,a5
  1197. of4         move.l  0(a5),d0
  1198.             cmp.l   #50,d0
  1199.             ble     of3
  1200.             move.l  d0,d5
  1201.             lsl.l   #2,d5
  1202.             move.l  d5,a5
  1203.             move.l  d0,d5
  1204.             tst     d6
  1205.             bpl.s   of45
  1206.  
  1207.             cmp.l   remembr(PC),d0
  1208.             bne.s   of4
  1209.             clr.l   remembr
  1210.             move.l  (a7)+,d1
  1211.             CALL    UnLock,dosbase(PC)
  1212.             rts
  1213.  
  1214. of45        move.l  8(a5),d4
  1215.             bsr     getfinfo
  1216.             move.l  finfoptr,a4
  1217.  
  1218.             tst.l   d6
  1219.             beq.s   of8
  1220.             bmi.s   of8
  1221.             tst.l   4(a4)
  1222.             bpl     of4
  1223. of8         move.l  d5,d0
  1224.             bsr     hexa
  1225.             move.l  #access,d0
  1226.             cmp     #-2,d4
  1227.             beq.s   of7
  1228.             add.l   #8,d0
  1229. of7         bsr     putstr
  1230.             tst.l   4(a4)
  1231.             bmi.s   of9
  1232.             move.l  #longnix,d0
  1233.             bsr     putstr
  1234.             bra     of10
  1235. of9         move.l  124(a4),d0
  1236.             bsr     longdec
  1237. of10        move.l  d5,d0
  1238.             bsr     getpath
  1239.             bra     of4
  1240.  
  1241.             bsr     newline
  1242. of3         move.l  (a7)+,d1
  1243.             CALL    UnLock,dosbase(PC)
  1244. of2         move.l  0(a3),a3
  1245.             cmpa.l  #0,a3
  1246.             bne     of1
  1247.             bsr     freefinfo
  1248.             rts
  1249.  
  1250. ;---------- Dos Devices ----------
  1251.  
  1252. devices     lea     ddheader(PC),a0
  1253.             bsr     puthead
  1254.             bsr     devinfo
  1255. dev1        adda.l  a1,a1
  1256.             adda.l  a1,a1
  1257.             clr.b   d6
  1258.             tst.l   4(a1)
  1259.             bne     dev2
  1260.             move.l  40(a1),d0
  1261.             bsr     putbcpl
  1262.             move.l  #10,d1
  1263.             bsr     tab
  1264.             cmp.l   #20,28(a1)
  1265.             ble     dev9
  1266.             moveq   #1,d6
  1267.             move.l  28(a1),a3
  1268.             adda.l  a3,a3
  1269.             adda.l  a3,a3
  1270.             cmp.l   #20,8(a3)
  1271.             ble     dev9
  1272.             move.l  8(a3),a2
  1273.             adda.l  a2,a2
  1274.             adda.l  a2,a2
  1275.             move.l  12(a2),d3
  1276.             movem.l a1-a3,-(a7)
  1277.             bsr     bytedec
  1278.             movem.l (a7)+,a1-a3
  1279.             moveq   #1,d3
  1280.             move.l  20(a2),d0
  1281.             bsr     longdec
  1282.             move.l  40(a2),d0
  1283.             beq.s   devs20
  1284.             addq    #1,d0
  1285.             sub.l   36(a2),d0
  1286. devs20      bsr     longdec
  1287.             move.l  44(a2),d0
  1288.             bsr     longdec
  1289.             bra.s   dev8
  1290. dev9        move.l  #notfile,d0
  1291.             bsr     putstr
  1292. dev8        tst.l   8(a1)
  1293.             beq.s   dev6
  1294.             move.l  #devload,d0
  1295.             bra.s   dev5
  1296. dev6        move.l  #devnload,d0
  1297. dev5        bsr     putstr
  1298.             tst.b   d6
  1299.             beq.s   dev7
  1300.             move.l  4(a3),d0
  1301.             bne.s   dev4
  1302. dev7        move.l  16(a1),d0
  1303.             bne.s   dev4
  1304.             tst.l   8(a1)
  1305.             beq.s   dev11
  1306.             move.l  8(a1),a3
  1307.             move.l  -82(a3),d0
  1308.             bsr     putstr
  1309.             bra     dev11
  1310. dev4        bsr     putbcpl
  1311. dev11       bsr     newline
  1312. dev2        move.l  0(a1),a1
  1313.             cmpa.l  #0,a1
  1314.             bne     dev1
  1315.             rts
  1316.  
  1317. ; Check if a named dos-device is mounted
  1318. ; name in 'buffer'.
  1319. ; Result: d0 = 0(false) anything else(true).
  1320.  
  1321. finddev     bsr     devinfo
  1322. fdev1       adda.l  a1,a1
  1323.             adda.l  a1,a1
  1324.             clr.b   d6
  1325.             tst.l   4(a1)
  1326.             bne.s   fdev2
  1327.             move.l  40(a1),a2
  1328.             lea     buffer,a0
  1329.             bsr     strbcmp
  1330.             tst     d0
  1331.             bne.s   fdev3
  1332. fdev2       move.l  0(a1),a1
  1333.             cmpa.l  #0,a1
  1334.             bne.s   fdev1
  1335. fdev3       rts
  1336.  
  1337. ; Re-assign a drive to dos
  1338.  
  1339. freedrive   clr.l   dp_Arg1
  1340.             bra     ldr3
  1341.  
  1342. ; Inhibit a disk drive
  1343.  
  1344. lockdrive   move.l  #1,dp_Arg1
  1345. ldr3        bsr     getstr
  1346.             bsr     finddev
  1347.             bne.s   ldr1
  1348. ldr2        move.l  #buffer,d0
  1349.             bsr     putstr
  1350.             move.l  #nomount,d0
  1351.             bsr     putstr
  1352.             move.l  #dishelp,d0
  1353.             bra     putnam
  1354. ldr1        move.l  #buffer,d1
  1355.             CALL    DeviceProc,dosbase(PC)
  1356.             tst.l   d0
  1357.             beq.s   ldr2
  1358.             move.l  d0,a0
  1359.             move.l  #31,dp_Type
  1360.             bra     cons1
  1361.  
  1362. ;display the current directory of all processes,
  1363. ;except Workbench.(Worbench pr_CurrentDir is not a lock)
  1364.  
  1365. currentdir  lea     wbname(PC),a1
  1366.             CALL    FindTask,_SysBase(PC)
  1367.             move.l  d0,wbaddr
  1368.             lea     cdheader(PC),a0
  1369.             bsr     puthead
  1370.             bsr     allocfinfo
  1371.             bsr     getaskdat
  1372.             lea     buffer,a5
  1373. cd2         tst.b   entries
  1374.             beq.s   cd6
  1375.             cmp.b   #13,8(a5)
  1376.             bne.s   cd5
  1377.             move.l  wbaddr(PC),d0
  1378.             cmp.l   0(a5),d0
  1379.             beq.s   cd5
  1380.             move.l  4(a5),d0
  1381.             bsr     putstr
  1382.             move.l  #15,d1
  1383.             bsr     tab
  1384.             move.l  0(a5),a4
  1385.             move.l  152(a4),d0
  1386.             bne.s   cd1
  1387.             move.l  #syst,d0
  1388.             bsr     putnam
  1389.             bra.s   cd5
  1390. cd1         bsr     getpath
  1391. cd5         subq.b  #1,entries
  1392.             lea     16(a5),a5
  1393.             bra.s   cd2
  1394. cd6         bsr     freefinfo
  1395.             rts
  1396.  
  1397. ;Change the current directory setting of a process
  1398.  
  1399. cd          tst.b   fromfile
  1400.             bne     cd10
  1401.             move.l  a0,-(a7)
  1402.             lea     wbname(PC),a1
  1403.             CALL    FindTask,_SysBase(PC)
  1404.             move.l  d0,wbaddr
  1405.             move.l  (a7)+,a0
  1406.             bsr     getstr
  1407.             move.l  a0,-(a7)
  1408.             move.l  #buffer,d1
  1409.             move.l  #-2,d2
  1410.             CALL    Lock,dosbase(PC)
  1411.             move.l  (a7)+,a0
  1412.             tst.l   d0
  1413.             bne     cd16
  1414.             move.l  #dnotf,d0
  1415.             bra     putnam
  1416. cd16        move.l  d0,remembr
  1417.             move.l  a0,-(a7)
  1418.             bsr     allocfinfo
  1419.             move.l  remembr(PC),d0
  1420.             bsr     getfinfo
  1421.             move.l  finfoptr,a5
  1422.             move.l  (a7)+,a0
  1423.             tst.l   4(a5)
  1424.             bpl.s   cd11
  1425.             move.l  #notdir,d0
  1426.             bsr     putnam
  1427.             bra     cd18
  1428. cd11        bsr     nodenam
  1429.             moveq.l #2,d7
  1430.             lea     TRuNode(PC),a4
  1431.             bsr     findnam
  1432.             tst.b   d7
  1433.             beq.s   cd15
  1434.             move.l  d0,a5
  1435.             cmp.b   #13,8(a5)
  1436.             beq.s   cd15
  1437.             bsr     syntax
  1438.             bra     cd18
  1439. cd15        cmp.l   wbaddr,d0
  1440.             bne.s   cd13
  1441.             move.l  #wberr,d0
  1442.             bsr     putnam
  1443.             bra     cd12
  1444. cd13        move.l  152(a5),d1
  1445.             move.l  remembr,152(a5)
  1446.             move.l  d1,remembr
  1447. cd12        tst.l   remembr
  1448.             beq.s   cd14
  1449.             move.l  #unltxt,d0
  1450.             bsr     putstr
  1451.             move.l  remembr(PC),d0
  1452.             bsr     getpath
  1453.             move.l  #unltxt2,d0
  1454.             bsr     putstr
  1455.             bsr     readline
  1456.             ori.b   #$20,dummy
  1457.             cmp.b   #'y',dummy
  1458.             bne.s   cd14
  1459. cd18        move.l  remembr(PC),d1
  1460.             beq.s   cd14
  1461.             CALL    UnLock,dosbase(PC)
  1462. cd14        bsr     freefinfo
  1463. cd10        rts
  1464.  
  1465. inphand     tst.b   background
  1466.             bne.s   inph1
  1467.             bsr     installh
  1468. inph1       move.l  #500,d4
  1469.             lea     InInterrupt(PC),a0
  1470. inph2       tst.l   4(a0)
  1471.             beq.s   inph3
  1472.             move.l  4(a0),a0
  1473.             dbf     d4,inph2
  1474. inph3       tst.b   background
  1475.             bne.s   inph4
  1476.             movem.l d4/a0,-(a7)
  1477.             bsr     removeh
  1478.             movem.l (a7)+,d4/a0
  1479. inph4       cmp.w   #-1,d4
  1480.             bne.s   inph5
  1481.             move.l  #failed,d0
  1482.             bra     putnam
  1483. inph5       move.l  a0,-(a7)
  1484.             lea     inheader(PC),a0
  1485.             bsr     puthead
  1486.             move.l  (a7)+,a5
  1487. inph6       move.l  0(a5),a5
  1488.             tst.l   0(a5)
  1489.             beq.s   inph7
  1490.             move.l  a5,d0
  1491.             bsr     hexa
  1492.             move.l  14(a5),d0
  1493.             bsr     hexa
  1494.             move.l  18(a5),d0
  1495.             bsr     hexa
  1496.             move.b  9(a5),d3
  1497.             bsr     plusmins
  1498.             move.l  10(a5),d0
  1499.             bne.s   inph8
  1500.             move.l  #longnix,d0
  1501. inph8       bsr     putnam
  1502.             bra.s   inph6
  1503. inph7       rts
  1504.  
  1505. ;get all screen pointers.
  1506. ;result: d5=number of screens
  1507. ;        buffer+100 holds pointers.
  1508.  
  1509. getscr      lea     scrheader(PC),a0
  1510.             bsr     puthead
  1511. getscr2     move.l  intuibase(PC),a2
  1512.             move.l  60(a2),a2
  1513.             lea     buffer+100,a1
  1514.             move.w  #$4000,$dff09a
  1515.             clr.l   d5
  1516. sr1         move.l  a2,(a1)+
  1517.             move.l  0(a2),a2
  1518.             addq.l  #1,d5
  1519.             cmpa.l  #0,a2
  1520.             bne.s   sr1
  1521.             subq    #1,d5
  1522.             move.w  #-$4000,$dff09a
  1523.             rts
  1524.  
  1525. ;display screen addresses and titles
  1526.  
  1527. screens     bsr     getscr
  1528.             moveq   #1,d6
  1529.             lea     buffer+100,a1
  1530. sr2         move    d6,d3
  1531.             bsr     bytedec
  1532.             move.l  0(a1),d0
  1533.             bsr     hexa
  1534.             move.l  (a1)+,a2
  1535.             move.l  22(a2),d0
  1536.             bsr     putnam
  1537.             addq    #1,d6
  1538.             dbf     d5,sr2
  1539.             rts
  1540.  
  1541. ;display window addresses and titles
  1542.  
  1543. windows     clr.b   bool
  1544. windows1    bsr     getscr
  1545.             tst.b   bool
  1546.             beq.s   wn20
  1547.             move.l  d5,-(a7)
  1548.             lea     fohead(PC),a0
  1549.             bsr     puthead
  1550.             move.l  (a7)+,d5
  1551. wn20        lea     buffer+100,a4
  1552. wn2         move.l  #onscr,d0
  1553.             bsr     putstr
  1554.             move.l  (a4)+,a2
  1555.             move.l  22(a2),d0
  1556.             bsr     putnam
  1557.             move.l  4(a2),a1
  1558.             clr     d6
  1559. wn1         cmpa.l  #0,a1
  1560.             beq.s   wn3
  1561.             addq    #1,d6
  1562.             move.l  d6,d3
  1563.             bsr     bytedec
  1564.             move.l  a1,d0
  1565.             bsr     hexa
  1566.             move.l  32(a1),d0
  1567.             bsr     putnam
  1568.  
  1569.             tst.b   bool
  1570.             beq.s   wn21
  1571.             move.l  a1,-(a7)
  1572.             move.l  50(a1),a1
  1573.             move.l  52(a1),a1
  1574.             bsr     fontdata
  1575.             move.l  (a7)+,a1
  1576.  
  1577. wn21        move.l  0(a1),a1
  1578.             bra.s   wn1
  1579. wn3         dbf     d5,wn2
  1580.             rts
  1581.  
  1582. ;close a specified screen
  1583.  
  1584. closescreen bsr     getscr2
  1585.             moveq   #1,d6
  1586.             cmp.b   #'$',0(a0)
  1587.             bne.s   cs1
  1588.             bsr     readhex
  1589.             tst     d7
  1590.             beq     syntax
  1591.             move.l  d0,d4
  1592. csin        clr.l   d6
  1593. cs1         lea     buffer+100,a2
  1594. cs5         tst     d6
  1595.             bne.s   cs2
  1596.             cmp.l   (a2)+,d4
  1597.             beq.s   cs3
  1598.             bra.s   cs4
  1599. cs2         move.l  (a2)+,a1
  1600.             move.l  22(a1),a1
  1601.             bsr     strcmp
  1602.             tst     d0
  1603.             beq.s   cs3
  1604. cs4         dbf     d5,cs5
  1605.             move.l  #scnofound,d0
  1606.             bra     putnam
  1607. cs3         move.l  -4(a2),a0
  1608.             CALL    CloseScreen,intuibase(PC)
  1609.             rts
  1610.  
  1611. ;close a specified window
  1612.  
  1613. closewindow bsr     getscr2
  1614.             moveq   #1,d6
  1615.             cmp.b   #'$',0(a0)
  1616.             bne.s   cw1
  1617.             bsr     readhex
  1618.             tst     d7
  1619.             beq     syntax
  1620. cwin        move.l  d0,d4
  1621.             clr.l   d6
  1622. cw1         lea     buffer+100,a2
  1623. cw5         move.l  (a2)+,a4
  1624.             move.l  4(a4),a4
  1625. cw6         cmpa.l  #0,a4
  1626.             beq.s   cw4
  1627.             tst     d6
  1628.             bne.s   cw2
  1629.             cmp.l   a4,d4
  1630.             beq.s   cw3
  1631.             bra.s   cw7
  1632. cw2         move.l  32(a4),a1
  1633.             bsr     strcmp
  1634.             tst     d0
  1635.             beq.s   cw3
  1636. cw7         move.l  0(a4),a4
  1637.             bra.s   cw6
  1638. cw4         dbf     d5,cw5
  1639.             move.l  #winnofound,d0
  1640.             bra     putnam
  1641. cw3         move.l  a4,a0
  1642.             clr.l   d0
  1643.             CALL    ModifyIDCMP,intuibase(PC)
  1644.             move.l  a4,a0
  1645.             CALL    CloseWindow,intuibase(PC)
  1646.             rts
  1647.  
  1648. windowoff   movem.l d1-d7/a0-a6,-(a7)
  1649.             bsr     getscr2
  1650.             bsr     cwin
  1651.             move.l  -(a2),a0
  1652.             move.l  a0,d4
  1653.             tst.l   4(a0)
  1654.             bne.s   woff1
  1655.             bsr     getscr2
  1656.             bsr     csin
  1657. woff1       movem.l (a7)+,d1-d7/a0-a6
  1658.             rts
  1659.  
  1660. closetskwin movem.l d1-d7/a0-a6,-(a7)
  1661. ctw0        bsr     getscr2
  1662.             lea     buffer+100,a2
  1663. ctw1        move.l  (a2)+,a4
  1664.             move.l  4(a4),a4
  1665. ctw6        cmpa.l  #0,a4
  1666.             beq.s   ctw4
  1667.             move.l  86(a4),a0
  1668.             move.l  16(a0),d1
  1669.             cmp.l   d0,d1
  1670.             bne.s   ctw7
  1671.             move.l  d0,d1
  1672.             move.l  a4,d0
  1673.             bsr     windowoff
  1674.             move.l  d1,d0
  1675.             bra     ctw0
  1676. ctw7        move.l  0(a4),a4
  1677.             bra.s   ctw6
  1678. ctw4        dbf     d5,ctw1
  1679.             movem.l (a7)+,d1-d7/a0-a6
  1680.             rts
  1681.  
  1682. ;display windows and associated fonts
  1683.  
  1684. windowfonts move.b  #1,bool
  1685.             bra     windows1
  1686.  
  1687. ;display loaded font names and definitions
  1688.  
  1689. fonts       lea     fohead(PC),a0
  1690.             bsr     puthead
  1691.             move.l  gfxbase(PC),a1
  1692.             move.l  $8c(a1),a1
  1693. fo1         tst.l   0(a1)
  1694.             beq.s   fo3
  1695.             bsr     fontdata
  1696.             move.l  0(a1),a1
  1697.             bra     fo1
  1698. fo3         rts
  1699.  
  1700. fontdata    move.l  a1,d0
  1701.             bsr     hexa
  1702.             move.w  30(a1),d3
  1703.             bsr     bytedec
  1704.             move.w  20(a1),d3
  1705.             bsr     bytedec
  1706.             move.w  24(a1),d3
  1707.             bsr     bytedec
  1708.             move.l  #romfnt,d0
  1709.             btst    #1,23(a1)
  1710.             beq.s   fod1
  1711.             move.l  #diskfnt,d0
  1712. fod1        bsr     putstr
  1713.             move.b  32(a1),d3
  1714.             bsr     bytedec
  1715.             move.b  33(a1),d3
  1716.             bsr     bytedec
  1717.             move.l  10(a1),d0
  1718.             bra     putnam
  1719.  
  1720. ;set update rate
  1721.  
  1722. settime     bsr     getnum
  1723.             tst.b   d7
  1724.             beq.s   syntax
  1725.             tst.w   d2
  1726.             bne.s   st1
  1727.             move.b  #1,d2
  1728. st1         move.b  d2,timeout
  1729.             rts
  1730. syntax      move.l  #synerr,d0
  1731.             bra     putnam
  1732.  
  1733. ;copy a string from input to 'buffer'
  1734. ;a0 = pointer to string
  1735.  
  1736. getstr      lea     buffer,a5
  1737. gst2        cmp.b   #' ',0(a0)
  1738.             beq.s   gst1
  1739.             cmp.b   #10,0(a0)
  1740.             beq.s   gst1
  1741.             move.b  (a0)+,(a5)+
  1742.             bra.s   gst2
  1743. gst1        clr.b   0(a5)
  1744.             bra     kllblnks
  1745.  
  1746. ;read in a nodename or a processname
  1747.  
  1748. nodenam     bsr     isdec
  1749.             move.b  d2,procnum
  1750. nodenam2    bsr     kllblnks
  1751.             move.l  a0,a5
  1752. gno1        cmp.b   #10,(a0)+
  1753.             bne.s   gno1
  1754.             move.b  #0,-1(a0)
  1755.             rts
  1756.  
  1757. ;modify a task's priority
  1758.  
  1759. taskpri     bsr     getnum
  1760.             tst.b   d7
  1761.             beq     syntax
  1762.             move.b  d2,newpri
  1763.             bsr     nodenam
  1764.             moveq.l #2,d7
  1765.             lea     TRuNode(PC),a4
  1766.             bsr     findnam
  1767.             tst.b   d7
  1768.             beq.s   tp1
  1769.             move.l  d0,a1
  1770.             move.b  newpri,d0
  1771.             CALL    SetTaskPri,_SysBase(PC)
  1772. tp1         rts
  1773.  
  1774. ;set the priority of our task
  1775.  
  1776. mypri       bsr     getnum
  1777.             tst.b   d7
  1778.             beq     syntax
  1779.             move.l  _SysBase(PC),a1
  1780.             move.l  276(a1),a1
  1781.             move.l  d2,d0
  1782.             CALL    SetTaskPri,_SysBase(PC)
  1783.             rts
  1784.  
  1785. ;cancel a task or a process. The theory is quite simple:
  1786. ;(Process->ReturnAddr)-4 points to the return address on
  1787. ;the stack. Task->SPReg points to the next instruction
  1788. ;to be executed. We just need a
  1789. ; *(Task->SPReg) = *(Process->ReturnAddr-4).
  1790. ;If the process has been started from Dos (CLI) and
  1791. ;the process is doing disk I/O, the CLI will respond with
  1792. ;a GURU #87000004 (AsyncPKT=unexpected packed received).
  1793. ;Thats why the calling CLI is also canceled.
  1794.  
  1795.  
  1796. cancel      tst.b   fromfile
  1797.             beq.s   cancel1
  1798.             rts
  1799. cancel1     clr.l   remembr         ;used for CLI stdio
  1800.             clr.l   remembr2
  1801.             clr.b   bool
  1802.             bsr     nodenam
  1803. testagain   moveq.l #1,d7
  1804.             lea     TReNode(PC),a4
  1805.             bsr     findnam
  1806.             move.l  a5,pointer
  1807.             tst.b   d7
  1808.             bne.s   canok
  1809.             move.l  #stperr,d0
  1810.             bra     putnam
  1811. canok       move.l  d0,a1          ;d0=task
  1812.             cmp.b   #1,8(a1)       ;TASK ?
  1813.             bne.s   isproc
  1814.             CALL    RemTask,_SysBase(PC)
  1815.             rts
  1816. isproc      movem.l d0-d7/a0-a6,-(a7)
  1817.             move.l  #-1,d0            ;needed for recursive killing tasks
  1818.             CALL    AllocSignal,_SysBase(PC)
  1819.             clr.l   d1
  1820.             bset    d0,d1
  1821.             move.l  d1,cancelbit
  1822.             move.l  d0,cancelbnum
  1823.             movem.l (a7)+,d0-d7/a0-a6
  1824.  
  1825.             clr.l   d5
  1826.             tst.l   $ac(a1)         ;pr_CLI
  1827.             beq.s   wascreproc
  1828.             move.l  $80(a1),a2      ;Seglist
  1829.             adda.l  a2,a2
  1830.             adda.l  a2,a2
  1831.             move.l  12(a2),d1       ;empty ?
  1832.             bne.s   wascreproc
  1833.             move.l  $ac(a1),a2      ;CommandLineInterface
  1834.             adda.l  a2,a2
  1835.             adda.l  a2,a2
  1836.             move.l  60(a2),d5       ;cli_Module
  1837.             tst.l   40(a2)          ;IsInteractive
  1838.             beq     dosreturn
  1839.             move.l  28(a2),remembr  ;yes,get Cli-Window locks
  1840.             move.l  56(a2),remembr2
  1841.             bra     dosreturn
  1842. wascreproc  tst.b   bool            ;it is not a CLI, ask what to do
  1843.             bne.s   unload
  1844.             move.b  #3,bool
  1845.             move.l  #canerr0,d0     ;ask for Workbench
  1846.             bsr     putstr
  1847.             bsr     readline
  1848.             ori.b   #$20,dummy
  1849.             cmp.b   #'y',dummy
  1850.             beq.s   andagain
  1851.             move.b  #2,bool
  1852.             move.l  #canerr1,d0    ;ask for unload
  1853.             bsr     putstr
  1854.             bsr     readline
  1855.             ori.b   #$20,dummy
  1856.             cmp.b   #'y',dummy
  1857.             bne.s   andagain
  1858.             move.b  #1,bool
  1859. andagain    move.l  pointer(PC),a5
  1860.             bra     testagain      ;test if the task still there
  1861.  
  1862. unload      move.l  128(a1),d4 ;get Segmentlist
  1863.             beq.s   unl3
  1864.             lsl.l   #2,d4
  1865.             move.l  d4,a3
  1866.             move.l  12(a3),d4
  1867. unl3        tst.l   d4
  1868.             bne.s   unl4
  1869.             move.l  #unloaderr,d0 ;no Segments !?
  1870.             bra     putnam
  1871.  
  1872. unl4        cmp.b   #3,bool            ;Workbench Task
  1873.             bne.s   unl2
  1874.             move.l  a1,-(a7)
  1875.             move.l  #40,d0             ;build a copy of the
  1876.             move.l  #$10000,d1         ;Worbench startup-message
  1877.             CALL    AllocMem,_SysBase(PC)
  1878.             move.l  d0,startmess
  1879.             move.l  (a7)+,a1
  1880.             move.l  d0,a0
  1881.             move.b  #5,8(a0)
  1882.             move.w  #20,18(a0)
  1883.             move.l  d4,24(a0)
  1884.             move.l  a1,d0
  1885.             add.l   #92,d0
  1886.             move.l  d0,20(a0)
  1887.             movem.l a0-a1,-(a7)
  1888.             lea     wbname(PC),a1
  1889.             CALL    FindPort,_SysBase(PC)
  1890.             movem.l (a7)+,a0-a1
  1891.             move.l  d0,14(a0)
  1892.  
  1893. unl2        cmp.b   #1,bool
  1894.             bne.s   dosreturn
  1895.             move.l  a1,-(a7)           ;unload process manualy
  1896.             move.l  d4,d1
  1897.             CALL    UnLoadSeg,dosbase(PC)
  1898.             move.l  (a7)+,a1
  1899.  
  1900. dosreturn   move.l  140(a1),savedat ;Processnumber
  1901. dosret1     move.w  #$4000,$dff09a
  1902.             move.l  54(a1),a3
  1903.             move.l  #endtask,0(a3)
  1904.             move.l  #2,106(a1)
  1905.             move.l  mytask(PC),108(a1)
  1906.             cmp.b   #4,15(a1)        ;if waiting
  1907.             bne.s   doswait
  1908.             move.l  a1,d4
  1909.             CALL    Remove,_SysBase(PC)
  1910.             move.l  d4,a1
  1911.             lea     406(a6),a0       ; activate the task
  1912.             CALL    AddHead,_SysBase(PC)
  1913.             move.l  d4,a1
  1914. doswait     move.w  #-$4000,$dff09a
  1915.             tst.b   bool
  1916.             bne.s   endnodos
  1917.             tst.l   d5
  1918.             beq     endcanc
  1919.             move.l  $ac(a1),a2
  1920.             adda.l  a2,a2
  1921.             adda.l  a2,a2
  1922. dwa1        movem.l d0-d7/a0-a6,-(a7)
  1923.             move.l  cancelbit(PC),d0
  1924.             CALL    Wait,_SysBase(PC)
  1925.             movem.l (a7)+,d0-d7/a0-a6
  1926.             clr.l   d5
  1927.             bra     dosret1
  1928.  
  1929. endcanc     move.l  a1,-(a7)
  1930.             move.l  remembr(PC),d1    ;close CLI-Window
  1931.             beq.s   ecan1             ;if any
  1932.             CALL    Close,dosbase(PC)
  1933. ecan1       move.l  remembr2(PC),d1
  1934.             beq.s   ecan2
  1935.             CALL    Close,dosbase(PC)
  1936. ecan2       move.l  (a7)+,a1
  1937.  
  1938.             move.l  savedat(PC),d0   ;remove Task from
  1939.             move.l  dosbase(PC),a2   ;TaskArray
  1940.             move.l  34(a2),a2
  1941.             move.l  0(a2),a2
  1942.             adda.l  a2,a2
  1943.             adda.l  a2,a2
  1944.             lsl.l   #2,d0
  1945.             clr.l   0(a2,d0)
  1946.  
  1947. endnodos    move.l  a1,d0
  1948.             bsr     closetskwin
  1949.             move.l  cancelbnum(PC),d0      ;remove our Signal
  1950.             CALL    FreeSignal,_SysBase(PC)
  1951.             rts
  1952.  
  1953. ;This Code is (hopefully) excuted by the Process we want
  1954. ;to kill
  1955.  
  1956. endtask     CALL    Forbid,_SysBase(PC)
  1957.             CALL    Disable,_SysBase(PC)
  1958.             move.l  _SysBase(PC),a1
  1959.             move.l  276(a1),a1
  1960.             move.l  176(a1),a1          ;Process_ReturnAddr
  1961.             lea     -4(a1),a7           ;reset Process Stackptr
  1962.             tst.b   bool
  1963.             bne.s   et0
  1964.             movea.l mytask(PC),a1
  1965.             move.l  cancelbit(PC),d0    ;signal Xoper it
  1966.             CALL    Signal,_SysBase(PC) ;died
  1967. et0         cmp.b   #3,bool             ;Workbench Process ?
  1968.             bne.s   et1
  1969.             move.l  startmess(PC),a1
  1970.             CALL    ReplyMsg,_SysBase(PC) ;reply startup message
  1971. et1         rts
  1972.  
  1973. ;Stop a task (just queue it on a special list)
  1974.  
  1975. freeze      bsr     nodenam
  1976.             moveq.l #1,d7
  1977.             lea     TReNode(PC),a4
  1978.             bsr     findnam
  1979.             tst.b   d7
  1980.             bne.s   frok
  1981.             move.l  #stperr,d0
  1982.             bra     putstr
  1983. frok        move.w  #$4000,$dff09a
  1984.             move.l  d0,a1
  1985.             CALL    Remove,_SysBase(PC)
  1986.             move.w  #-$4000,$dff09a
  1987.             move.l  d0,a1
  1988.             move.l  d0,a5
  1989.             lea     stplist(PC),a0
  1990.             CALL    AddHead,_SysBase(PC)
  1991.             add.b   #4,15(a5)
  1992.             rts
  1993. ;put the task back on its list
  1994. warm        bsr     nodenam
  1995.             lea     stplist(PC),a0
  1996.             movea.l a5,a1
  1997.             clr.l   d7
  1998.             bsr     fn4
  1999.             tst.b   d7
  2000.             bne.s   waok
  2001.             move.l  #waerr,d0
  2002.             bra     putstr
  2003. waok        move.w  #$4000,$dff09a
  2004.             move.l  d0,a1
  2005.             CALL    Remove,_SysBase(PC)
  2006.             move.l  d0,a1
  2007.             move.l  d0,a5
  2008.             move.l  TReNode,a0
  2009.             cmp.b   #8,15(a1)
  2010.             bne.s   wa1
  2011.             move.l  TWaNode,a0
  2012. wa1         adda.l  _SysBase(PC),a0
  2013.             CALL    AddTail,_SysBase(PC)
  2014.             move.l  d0,a1
  2015.             sub.b   #4,15(a5)
  2016.             move.w  #-$4000,$dff09a
  2017.             move.l  18(a5),d0
  2018.             and.l   26(a5),d0
  2019.             beq.s   wa2
  2020.             movea.l a5,a1
  2021.             CALL    Signal,_SysBase(PC)
  2022. wa2         rts
  2023. ;show the hunks of a process
  2024. hunks       bsr     nodenam
  2025.             moveq.l #2,d7
  2026.             lea     TRuNode(PC),a4
  2027.             bsr     findnam
  2028.             tst.b   d7
  2029.             bne.s   hu1
  2030.             rts
  2031. hu1         move.l  d0,a4
  2032.             cmp.b   #13,8(a4)
  2033.             beq.s   hu2
  2034.             move.l  #noprocs,d0
  2035.             bra     putnam
  2036. hu2         move.l  128(a4),d0
  2037.             beq.s   noprogload
  2038.             lsl.l   #2,d0
  2039.             move.l  d0,a3
  2040.             move.l  12(a3),d1
  2041.             beq.s   hu3
  2042.             move.l  #segloaded,d0
  2043. SHAR_EOF
  2044. #    End of shell archive
  2045. exit 0
  2046. -- 
  2047. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  2048. Have five nice days.
  2049.